package com.sz.common.pay.pingan;
/**
 * Function: 此包使用说明 <br>
 * @author: siqishangshu <br>
 * @date: 2017-10-27 20:38:00
 * 基于平安银行文档开发
 * constant 是代码中使用的常量
 * client 是核心处理数据交互的入口
 * entity 是数据处理的封装与解析
 * payment.properties 链接所用的配置信息，多主机配置，单机最大链接数，最大使用率等。
 *
 * 使用说明：
 * demo
 * {
 *  //TODO 封装请求数据
 *    String thirdLogNo = SequenceGenerator.getThirdLogNo();
 *    thirdLogNo 是每一个请示从平台到银行过程的流水号，用于查询结果。
     OpenAccountCardRequest openAccountCardReq = new OpenAccountCardRequest();
     openAccountCardReq.setThirdCustId(SequenceGenerator.getThirdLogNo());
     OpenAccountCardResponse openAccountCardRes = null;
    //TODO //特别重要：每个请求与响应都要记录到，数据库日志里表里（sys_operation_log），包括数据.这是交易排查的重要数据
    PrincipalLogUtils.addOperationLog(ModuleNames.BIZ, ModuleNames.BIZ_PAY, UserActions.REQUEST,PayAction.PAY,makeBackData(thirdLogNo,openAccountCardRes)...);
     try {
        openAccountCardRes = (OpenAccountCardResponse)
        PAPay.sendMessage(thirdLogNo,openAccountCardReq,OpenAccountCardResponse.class);
     } catch (NoAvailableConnectException e) {
        //处理链接数据不够，提示用户稍后再试。（系统问题，增加平安银行客户端（B2BiC）并配置更多链接，此步骤需要重启系统后生效）
     } catch (OperationFailedException e) {
        //银行返回操作失败，处理异常中封装的CommonHeadRes errorMessage，其包含了错误码与原因。
        //TODO 特别重要：每个请求与响应都要记录到，数据库日志里表里（sys_operation_log），包括数据.这是交易排查的重要数据
         PrincipalLogUtils.addOperationLog(ModuleNames.BIZ, ModuleNames.BIZ_PAY, UserActions.REQUEST_FAILED,PayAction.PAY,makeBackData(thirdLogNo,openAccountCardRes) ...);
     } catch (PayCommonException e) {
        //其它各种异常，测试过程应该全部处理，提示操作用户未知异常。代码处理或配置校验
        //TODO 特别重要：每个请求与响应都要记录到，数据库日志里表里（sys_operation_log），包括数据.这是交易排查的重要数据
         PrincipalLogUtils.addOperationLog(ModuleNames.BIZ, ModuleNames.BIZ_PAY, UserActions.REQUEST_EXCEPTION,PayAction.PAY,makeBackData(thirdLogNo,openAccountCardRes) ...);
     }
    //TODO  特别重要：每个请求与响应都要记录到，数据库日志里表里（sys_operation_log），包括数据.这是交易排查的重要数据
     PrincipalLogUtils.addOperationLog(ModuleNames.BIZ, ModuleNames.BIZ_PAY, UserActions.RESPONSE,PayAction.PAY,makeBackData(thirdLogNo,openAccountCardRes) ...);

      //TODO  获得响应数据 处理正常业务逻辑
    }
    private Map makeBackData(String thirdLogNo,Object obj){
        Map<> map = new HashMap<>()
        map.put("thirdLogNo",thirdLogNo);
        map.put(obj.getClass().getSimpleName(),obj);
        return map;
    }
 *
 * 实现原理：
 *  使用Socket与平安B2BiC进行短链接数据交互。
 *  由于每个B2BiC最大支持数有限，所以存在集群部署的情况，通过配置文件payment.properties进行集群配置，保证最大可用。
 *  当出现系统集群时，其配置IP进行分组配置到不同的集群主机上，并不能重复。
 *
 *  处理过程强制抛出三个异常，当数据交互正常时，返回正常响应时，不会出现异常，三个异常在业务中必须进行处理。
 *
 *  如果一个Request 没有对应的Response那就使用 CommonHeadResponse
 *  或者Response返回基本没有有用信息，可以使用 CommonHeadResponse获取返回结果
 */
